数据类型

与 Java 语言中的数据类型相似,JVM 可以操作的数据类型可分为两类:原始类型(primitive types,也称为基本类型)和引用类型(reference types)。与之对应,也存在有原始值(primitive values)和引用值(reference values)两种类型的数值可用于变量赋值、参数传递、方法返回和运算操作。

JVM 希望尽可能多的类型检查能在程序运行之前完成,由编译器来完成这些操作,使得JVM 在运行期间无需进行这些操作。原始类型的值不需要通过特殊标记或别的额外识别手段来在运行期确定它们的实际数据类型,也无需刻意将它们与引用类型的值区分开来,JVM 的字节码指令本身就可以确定它的指令操作数的类型是什么,所以可以利用这种特性即可直接确定操作数的数值类型。举个例子,iadd、ladd、fadd 和 dadd 这几条指令的操作含义都是将两个数值相加,并返个相加的结果,但是每一条指令都有自己的专属操作数类型,此处按顺序分别为:int、long、float 和 double。关于 JVM 字节码指令的介绍,读者可以参见本章的§2.11.1部分。

JVM 是直接支持对象的,这里的对象可以是指动态分配的某个类的实例,也可以指某个数组的实例。JVM 使用 reference 类型来表示对某个对象的引用,reference 类型的值读者可以想象成类似于一个指向对象的指针。每一个对象都可能存在多个指向它的引用,对象的操作、传递和检查都通过引用它的 reference 类型的数据进行操作。